package com.cnxjs.shs4et.service.impl;

import com.cnxjs.shs4et.common.JwtUtil;
import com.cnxjs.shs4et.common.Result;
import com.cnxjs.shs4et.entity.User;
import com.cnxjs.shs4et.repository.UserRepository;
import com.cnxjs.shs4et.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class UserImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    // 注册
    @Override
    public Result register(User user) {
        User userInDB = findByAccount(user.getAccount());
        if (userInDB == null) {
            // 学号错误
            return Result.error("学号不存在");
        } else if (userInDB.getIsActive() == 1) {
            // 已经注册
            return Result.error("该学号对应账号已被注册");
        } else {
            // 正常注册
            userInDB.setPassword(user.getPassword());
            userInDB.setNickName(user.getNickName());
            userInDB.setIsActive((byte) 1);
            userRepository.save(userInDB);
            return Result.success(user);
        }
    }

    // 登录
    @Override
    public Result login(User user) {
        User userInDB = findByAccount(user.getAccount());
        if (userInDB == null) {
            // 账号不存在
            return Result.error("该账号不存在");
        } else if (userInDB.getIsActive() == 0) {
            // 已经注册
            return Result.error("该学号对应账号尚未注册");
        } else if (!userInDB.getPassword().equals(user.getPassword())) {
            // 账户密码不正确
            return Result.error("账号或密码不正确");
        } else if (userInDB.getNickName().equals(user.getNickName())) {
            // 昵称已经被取了
            return Result.error("昵称已经被使用");
        } else {
            Map<String, Object> claims = new HashMap<>();
            claims.put("account", user.getAccount());
            claims.put("role", userInDB.getRole());
            String token = JwtUtil.generateJWT(claims);
            HashMap result = new HashMap();
            result.put("User", userInDB);
            result.put("Token", token);
            return Result.success(result);
        }
    }

    // 修改用户信息
    @Override
    public Result update(User user) {
        User userInDB = findByAccount(user.getAccount());
        // 修改密码
        if (user.getPassword() != null) {
            userInDB.setPassword(user.getPassword());
        }
        // 修改昵称
        if (user.getNickName() != null) {
            userInDB.setNickName(user.getNickName());
        }
//        // 修改角色
//        if (user.setRole()){
//            userInDB.setRole(user.getRole());
//        }
        userRepository.save(userInDB);
        return Result.success("更新信息成功");
    }

    @Override
    public Result delete(Integer id) {
        User user = userRepository.findById(id);
        user.setIsActive(0);
        user.setRegisterTime(null);
        userRepository.save(user);
        return Result.success("注销账号成功");
    }

    // 查找所有用户
    public Result findAll(Pageable pageable) {
        return Result.success(userRepository.findAll(pageable));
    }

    // 根据账号查询用户
    @Override
    public User findByAccount(String account) {
        return userRepository.findByaccount(account);
    }

}
